import { dateFormat, getDateOfInterval, isValidDate } from './DateUtils';

/**
 * 日期链式操作。
 * @description 在new DateChain(date)时会检查参数是否为有效的日期类型参数，如果不是，则会抛出异常。
 * @version 1.2.0
 * @example
 * ```
 * const date = new Date();
 * const dateFmt = new DateChain(date).getDateOfInterval(10).dateFormat('YYYY-MM-dd HH:mm:ss');
 * console.log('dateFmt ==> ' + dateFmt);
 * ```
 */
export class DateChain {

    private _value: any;

    constructor(value: Date = new Date()) {
        this.setValue(value);
    }

    getValue(): Date {
        return this._value;
    }

    setValue(value: Date) {
        if (!isValidDate(value)) {
            throw TypeError(`An error occurred in DateChain constructor(). Parameter value must be of type Date.`);
        }
        this._value = value;
    }

    /** 获取基础日期的间隔日期 */
    getDateOfInterval(interval = 0): DateChain {
        this._value = getDateOfInterval(interval, this._value);
        return this;
    }

    /** 日期格式化 */
    dateFormat(fmt = 'YYYY-MM-dd'): string {
        return dateFormat(this._value, fmt);
    }
}
